package BinaryTree;

import sun.reflect.generics.tree.Tree;

public class TreeTraversal树的遍历和修改值 {
    public static void preorder(TreeNode root) {
        //前序遍历  根左右
        if (root==null) {
            //根结点不存在，是一棵空树
            return;
        }
        System.out.printf("%c ",root.val);

        preorder(root.left);
        preorder(root.right);
    }

    public static void inorder(TreeNode root) {
        //中序遍历 左根右
        if(root==null) {
            return;
        }

        inorder(root.left);
        System.out.printf("%c ",root.val);
        inorder(root.right);
    }

    public static int i;//每次调用记得初始化i！！！！
    public static void postorder(TreeNode root) {
        //后序遍历 左右根
        if(root==null) {
            return;
        }
        System.out.println(root.left);
        System.out.println(root.right);
        System.out.printf("%c ",root.val);
    }

    public static void modify5thValPre (TreeNode root) {
        //按照前序遍历的方式将第五个结点改为z
        if (root==null) {
            return;
        }

        //每处理一次根，即已处理的结点个数+1
        i++;
        if(i==5) {
            root.val='z';
        }
        modify5thValPre(root.left);
        modify5thValPre(root.right);
    }

    public static void modify5thValIn (TreeNode root) {
        //按照中序遍历的方式将第五个结点改为z
        if (root==null) {
            return;
        }

        modify5thValIn(root.left);
        //每处理一次根，即已处理的结点个数+1
        i++;
        if(i==5) {
            root.val='z';
        }
        modify5thValIn(root.right);
    }

    public static void modify5thValPost (TreeNode root) {
        //按照后序遍历的方式将第五个结点改为z
        if (root==null) {
            return;
        }

        modify5thValPost(root.left);
        modify5thValPost(root.right);
        //每处理一次根，即已处理的结点个数+1
        i++;
        if(i==5) {
            root.val='z';
        }

    }


    public static void main(String[] args) {
        TreeNode root=BuildTree构建树.buildTree1();
        inorder(root);
        System.out.println();

        i=0;
        modify5thValIn(root);
        inorder(root);
    }
}
